import pygame
#在坐标原点创建一个分辨路为480X700的游戏窗口
SCREEN_RECT = pygame.Rect(0,0,480,700)


#定义游戏精灵类
class GameSprite(pygame.sprite.Sprite):
    #导入图片路径
    res_path = 'res/images/'

    def __init__(self,image_name,speed,*groups):
        '''
        参数：image_name：要添加的图片名称
        speed:移动速度。0表示静止
        groups；要添加到的精灵组，不传值则不添加
        '''
        super().__init__(*groups)
        #图像
        self.image = pygame.image.load(self.res_path + image_name)
        self.rect = self.image.get_rect()   #矩形区域，默认在左上角
        self.speed = speed                  #移动速度
    #更新精灵位置，默认在垂直方向
    def update(self,*args):
        self.rect.y += self.speed
#背景精灵类
class Background(GameSprite):
    def __init__(self,is_alt,*groups):
        #调用父类方法实现精灵的创建
        super().__init__('background.png',1,*groups)
        #判断是否是另一个精灵，如果是，需要设置初始位置
        if is_alt:
            self.rect.y = -self.rect.h  #将图片矩形y轴坐标与负的图片高度相符合，寄实现在上方等待
    def update(self,*args):
        #调用父类的方法实现向下运动
        super().update(*args)       #向下运动
        #判断是否移出屏幕，如果移出屏幕，将图像设置到屏幕的正上方
        if self.rect.y >= self.rect.h:
            self.rect.y = -self.rect.h
#状态按钮类
class StatusButton(GameSprite):
    #初始化
    def __init__(self,image_names,*groups):
        super().__init__(image_names[0],0,*groups)  #调用父类的初始化
        #加载图片
        self.images = [pygame.image.load(self.res_path + name) for name in image_names]
    #状态转换
    def switch_status(self,is_pause):
        self.image = self.images[1 if is_pause else 0]
#文本标签精灵
class Label(pygame.sprite.Sprite):                  #继承sprite类的label类
    font_path = './res/font/MarkerFelt.ttc'         #字体文件路径
    def __init__(self,text,size,color,*groups):
        super().__init__(*groups)
        self.font = pygame.font.Font(self.font_path,size)   #创建字体
        self.color = color                                  #字体颜色
        self.image = self.font.render(text,True,self.color) #图片渲染
        self.rect = self.image.get_rect()                   #字体矩形大小
    #设置文本，使用指定的文本重新渲染image，并且更新rect
    def set_text(self,text):
        self.image = self.font.render(text,True,self.color)
        self.rect = self.image.get_rect()
